package ca.etsmtl.log120.tp1.shapehierarchy;

import java.awt.Color;
import java.awt.Graphics;

/******************************************************
Cours : LOG120
Session : E2011
Groupe : 01
Projet : Laboratoire #2
Etudiants : Nicolas Blais Miko
 	 		Yohan Trepanier-Montpetit
Codes perm. : BLAN24079109
			  TREY16079108
Professeur : Chamseddine Talhi
Charge de labo : Eric Goulet
Nom du fichier : Circle.java
Date cree : 2011-05-18
Date dern. modif. 2015-05-23
*************************************************** ****
Historique des modifications
*************************************************** ****
2011-05-18 Version initiale (Nicolas Blais Miko)
2011-05-24 Implementation de drawShape() (Yohan Trepanier)
***************************************************/

/**
 * Classe permettant de representer un cercle
 * @param radius Le rayon du cercle
 */
public class Circle extends AbstractShape{

	private int radius; //Le rayon du cercle
	private Color color = Color.red;
	private static final int SHAPE_ID = 2;
	
	/**
	 * 
	 * CONSTRUCTEURS
	 * 
	 */
	
	public Circle(){}
	
	public Circle(int nseq, int posX, int posY, int radius){
		
		super(nseq,posX,posY,SHAPE_ID);
		this.radius = radius;
	}
	
	public Circle(Circle c){
		
		super(c.getNseq(),c.getPosX(),c.getPosY(),SHAPE_ID);
		radius = c.getRadius();
	}
	
	/**
	 * 
	 * ACCESSEURS
	 * 
	 */
	
	public int getRadius() {
		
		return radius;
	}
	
	/**
	 * 
	 * COMPORTEMENTS
	 * 
	 */
	
	/**
	 * Methode qui decrit un cercle avec une chaine de caractere
	 */
	public String toString(){
		
		return super.toString() + "Rayon: " + radius + " Type de forme: Cercle";
	}
	
	/**
	 * Methode qui retourne true si le cercle recu en parametre est identique au cercle qui appel
	 * @param c Le cercle avec lequel on compare
	 * @return vrai si les deux cercles sont identiques
	 */
	public boolean equals(Object obj){
		Circle shape = (Circle)obj;
		return super.equals(shape) && radius == shape.radius;
	}
	
	/**
	 * Methode qui retourne une copie du cercle recu en parametre
	 * @param c Le cercle a copier
	 * @return Une instance de Cercle identique au cercle recu
	 */
	public Circle copyOf(){
		
		return new Circle(this);
	}

	@Override
	public void drawShape(Graphics g2d) {
		g2d.setColor(color );
		g2d.fillOval(posX, posY, radius, radius);
		
	}

	@Override
	public double getAire() {
		
		return Math.PI*radius*radius;
	}

	@Override
	public int getHauteur() {
		
		return 2*radius;
	}

	@Override
	public int getLargeur() {
		
		return 2*radius;
	}

	@Override
	public double getDistance() {
		
		return 2*radius;
	}

	@Override
	public void setPosition(int x, int y) {
		
		posX = x;
		posY = y;
	}
}
